覺得打密碼很麻煩嗎?透過 Public Key Authentication 的方式,可以讓你不需輸入密碼就透過 SSH 進入你的遠端主機。
Public Key Authentication 是透過非對稱金鑰的方式來驗證 SSH 登入。所謂的非對稱金鑰是指,我們會產生兩把鑰匙:一把稱為公鑰(Public Key)、另一把稱為私鑰(Private Key),其中一個用來加密資料,就必須拿對應的金鑰解密才能得到原本的資料。
非對稱金鑰金鑰示意圖(Nicobon,CC-BY-SA 4.0,WikiMedia):
在實作免密碼登入 SSH 時,首先我們要產生一組公私鑰──由於私鑰必須自己保管,所以放在自己的機器(本機)上,公鑰則放到遠端主機。每次登入前,我們會先用私鑰傳送一段資料到遠端主機,遠端主機透過公鑰解開確定沒錯後,就可以達到免密碼登入的功能。
是怎麼做到一把公鑰、一把私鑰可以分別加密和解密的?
非對稱加密?到底是什麼鎖可以有兩把鑰匙,用簡單數學解釋給你聽
首先要先在 Client 端設定一組金鑰。只要使用 ssh-keygen
指令就可以了:
ssh-keygen
產生鑰匙的過程中會詢問幾個問題,例如要放在哪裡:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/noob/.ssh/id_rsa):
這些直接按下 Enter 保持預設值就可以了。另外也會詢問金鑰的保護密碼,由於我們是要達到免密碼登入,所以也直接按下 Enter 略過:
Enter passphrase (empty for no passphrase):
最後則會看到產生的金鑰:
Your identification has been saved in /home/noob/.ssh/id_rsa.
Your public key has been saved in /home/noob/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:O92QuN2lx4vHmgVTHsnAKKWKp+dAdQKOOq6B09wfD9E noob@My-Computer
The key's randomart image is:
+---[RSA 2048]----+
| . ..o. |
| o . ... .o . |
| . . o o. = |
| . o = . . o . |
|o o + E o o o |
|o+ o o . = + * |
|+.o + + + o +.+ |
|.o = + . =o. |
|. o . +o. |
+----[SHA256]-----+
放在使用者資料夾下的 .ssh
資料夾中,其中 id_rsa
為私鑰、id_rsa.pub
則為公鑰。
接著要把你的金鑰上傳到你的遠端主機上,你可以透過這個指令:
# ssh-copy-id [user]@[host]
ssh-copy-id noob@it30.noob.tw
接著試試看,直接 ssh 到你的遠端主機,是不是不會向你詢問密碼了呢?
你產生的公鑰,不只可以用在遠端主機的 SSH 登入。你的 GitHub 如果有私有的 Repository 的話,也可以透過這個方式免輸入密碼的 clone、pull 和 push。
首先到 GitHub 個人設定中,SSH and GPG Keys 裡點選 New SSH key,接著將你 id_rsa.pub
檔案中的內容直接貼到 Key 中,並按下 Add SSH key 即可。
記得設定完公鑰的電腦,以後要走 SSH 協定而不是 HTTPS 協定,才能有免密碼的功能!
本篇文章同步發表在 Noob's Space。